/* 
   Copyright (c) 2008 - Chris Buckley. 

   Permission is granted for use and modification of this file for
   research, non-commercial purposes. 
*/

#include "common.h"
#include "sysfunc.h"
#include "trec_eval.h"
#include "functions.h"
#include "trec_format.h"

static int
te_calc_num_q(const EPI * epi, const REL_INFO * rel_info,
              const RESULTS * results, const TREC_MEAS * tm, TREC_EVAL * eval);
static int
te_calc_avg_num_q(const EPI * epi, const TREC_MEAS * tm,
                  const ALL_REL_INFO * all_rel_info, TREC_EVAL * accum_eval);

/* See trec_eval.h for definition of TREC_MEAS */
TREC_MEAS te_meas_num_q = { "num_q",
    "    Number of topics results averaged over.  May be different from\n\
    number of topics in the results file if -c was used on the command line \n\
    in which case number of topics in the rel_info file is used.\n",
    te_init_meas_s_long,
    te_calc_num_q,
    te_acc_meas_s,
    te_calc_avg_num_q,
    te_print_single_meas_empty,
    te_print_final_meas_s_long,
    NULL, -1
};

static int
te_calc_num_q(const EPI * epi, const REL_INFO * rel_info,
              const RESULTS * results, const TREC_MEAS * tm, TREC_EVAL * eval)
{
    eval->values[tm->eval_index].value = 1;
    return (1);
}

/* Need custom calc_avg because after -c flag, calculated value may not
   agree with eval->num_queries. (Actually other ways to better do it now) */
static int
te_calc_avg_num_q(const EPI * epi, const TREC_MEAS * tm,
                  const ALL_REL_INFO * all_rel_info, TREC_EVAL * accum_eval)
{
    long num_queries = accum_eval->num_queries;
    if (epi->average_complete_flag)
        num_queries = all_rel_info->num_q_rels;

    accum_eval->values[tm->eval_index].value = num_queries;
    return (1);
}
